import router from '@/router'
import store from '@/store'
import nProgress from 'nprogress'
// 引入进度条
import NProgress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'
const whiteList = ['/login', '/404']
// 前置守卫
router.beforeEach(async (to, from, next) => {
  nProgress.start()
  if (store.getters.token) {
    // 有 token的情况下才会获取资料
    // 如果有token
    if (to.path === '/login') {
      // 如果是访问的登录页
      next('/') // 有token不用处理
    } else {
      // 只有放过的时候才 获取资料
      // 如果当前vuex中有用户id 表示有资料 ，不需要获取   ，反之同理
      if (!store.getters.userId) {
        // 没有资料获取资料
        // await 必须加await
        await store.dispatch('user/getUserInfo')
        const { roles } = await store.dispatch('user/getUserInfo') // 获取用户的信息  把 里边的menus 结构出来
        // 如果后续需要根据用户资料获取数据的话 ，这里 必须改成同步
        // console.log(roles)
        // 把获取到的 roles.menus 给 permission中的filterRoutes 的方法
        //  addRoutes  必须 用 next(地址) 不能用next()   否哦则不能去执行
        const routes = await store.dispatch('permission/filterRoutes', roles.menus)
        // console.log(routes)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }]) // 添加到路由表
        // router.addRoutes(routes) // 添加动态路由到路由表  铺路
        // console.log(router.addRoutes(routes))  undefined
        // console.log(routes)
        next(to.path)
      }
      next()
      // else {
      //   next()
      // }
    }
  } else {
    if (whiteList.indexOf(to.path) > -1) {
      // 如果大于-1  表示要去的地址在白名单
      next()
    } else {
      next('/login')
    }
  }
  NProgress.done()
})
// 后置守卫
router.afterEach(() => {
  // 关闭进度条
  nProgress.done()
})
